<?php

class Intensives_Model_DbTable_Contract extends Zend_Db_Table_Abstract
{

    protected $_name = 'contract';

    /**
     * Получение списка договоров из базы.
     *
     * @param int $chairId идентификатор кафедры, за которой закреплены
     * договоры.
     * @param string $order порядок сортировки (SQL-синтаксис).
     * @param int $count количество договоров в выборке.
     * @param int $offset смещение в выборке.
     *
     * @return Zend_Db_Table_Rowset_Abstract список договоров.
     */
    function fetchAllContracts($chairId = null, $order = null, $count = null, $offset = null)
    {
        $where = '';

        if (!is_null($chairId))
        {
            $where = $this->getDefaultAdapter()->quoteInto('chair_id = ?', $chairId);
        }

        return $this->fetchAll(
            $this->select()
                ->from(array('c' => $this->_name))
                ->setIntegrityCheck(false)
                ->join(array('l' => 'listener'), 'l.id = c.listener_id', array('CONCAT(surname,\' \',name,\' \',patronymic) AS listener'))
                ->where($where)
                ->order(array('date DESC', 'id DESC'))
        );
    }

    /**
     * Удаление договора из базы.
     *
     * @param int $contractId идентификатор договора.
     * 
     * @return int если 0, то не помечена, иначе помечена.
     */
    function deleteContract($contractId)
    {
        return $this->delete(array('id = ?' => $contractId));
    }

    /**
     * Пометка договора, как 'оплаченный'.
     *
     * @param int $contractId идентификатор помечаемого договора.
     *
     * @return int если 0, то не помечен, иначе помечен.
     */
    function pay($contractId, $receiptNumber, $receiptTotal, $receiptDate)
    {
        return $this->update(
            array(
                'paid' => 1,
                'receipt_number' => $receiptNumber,
                'receipt_total' => $receiptTotal,
                'receipt_date' => $receiptDate
            ),
            array('id = ?' => $contractId)
        );
    }

    /**
     * Пометка договора, как 'неоплаченный'.
     *
     * @param int $contractId идентификатор помечаемого договора.
     *
     * @return int если 0, то не помечен, иначе помечен.
     */
    function unpay($contractId)
    {
        return $this->update(
            array(
                'paid' => 0,
                'receipt_number' => NULL,
                'receipt_total' => NULL,
                'receipt_date' => NULL,
            ),
            array('id = ?' => $contractId));
    }

    /**
     * Получение списка договоров оформленных на слушателя.
     *
     * @param int $listenerId идентификатор слушателя.
     * @param string $sort порядок сортировки (SQL-синтаксис).
     *
     * @return Zend_Db_Table_Rowset_Abstract список договоров, оформленных на
     * указанного слушателя.
     */
    function getContractsByListenerId($listenerId, $sort = 'date DESC')
    {
        $where = array(
            'listener_id = ?' => $listenerId,
        );

        return $this->fetchAll($where, $sort);
    }

    function getContractDetails($contractId)
    {
        $where = $this->getDefaultAdapter()->quoteInto('c.id = ?', $contractId);

        return $this->fetchRow(
            $this->select()
                ->from(array('c' => $this->_name))
                ->setIntegrityCheck(false)
                ->join(array('ch' => 'chair'), 'c.chair_id = ch.id', array(
                    'chair_name' => 'name',
                    'chair_abbreviation' => 'abbreviation',
                ))
                ->join(array('l' => 'listener'), 'c.listener_id = l.id', array(
                    'listener_surname' => 'surname',
                    'listener_name' => 'name',
                    'listener_patronymic' => 'patronymic',
                    'listener_group' => 'group',
                    'listener_phone' => 'phone',
                    'listener_address' => 'address',
                    'listener_passport_series' => 'passport_series',
                    'listener_passport_number' => 'passport_number',
                    'listener_passport_givenout' => 'passport_givenout',
                    'listener_passport_givenout_when' => 'DATE_FORMAT(passport_givenout_when, \'%d.%m.%Y\')',
                    'listener_email' => 'email',
                ))
                ->where($where)
                ->limit(1)
        );
    }
}
